package com.general.framework.example.simpleFactoryPattern;

/**
 * 简单工厂模式（ Simple Facto Pattern 指由一个工厂对象决定创建哪一种产品的实例，
 * 但它不属于 GoF 23 种设计模式 简单工厂模式适用于工厂类负责创建的对象较少的场景，且
 * 客户端只需要传入工厂类的参数，对于如何创建对象不需要关心
 */
public class CourseFactory {
    // 1
    // public ICourse create(String name) {
    //     if ("java".equals(name)) {
    //         return new JavaCourse();
    //     } else if ("python".equals(name)) {
    //         return new PythonCourse();
    //     } else {
    //         return null;
    //     }
    // }

    // 2
    // public ICourse create(String className) {
    //     try {
    //         if (!(null == className || "".equals(className))){
    //             return (ICourse) Class.forName(className).newInstance();
    //         }
    //     }catch (Exception e){
    //         e.printStackTrace();
    //     }
    //     return null;
    // }
    // 3
    public ICourse create(Class<? extends ICourse> clazz) {
        try {
            if (null!=clazz){
                return clazz.newInstance();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
